<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="Cross-Origin-Embedder-Policy" content="require-corp">
    <meta http-equiv="Cross-Origin-Opener-Policy" content="same-origin">

    <title>工作者线程池案例</title>
</head>

<body>
    <div class="main">
        <h1>线程池</h1>

        <ul>
            <li>
                因为启用工作者线程代价很大，所以某些情况下可以考虑始终保持固定数量的线程活动，需要时就
                把任务分派给它们。工作者线程在执行计算时，会被标记为忙碌状态。直到它通知线程池自己空闲了，
                才准备好接收新任务。这些活动线程就称为“线程池”或“工作者线程池”。
                线程池中线程的数量多少合适并没有权威的答案，不过可以参考 navigator.hardware Concurrency
                属性返回的系统可用的核心数量。因为不太可能知道每个核心的多线程能力，所以最好把这个数字作为
                线程池大小的上限。
            </li>
            <li>
                一种使用线程池的策略是每个线程都执行同样的任务，但具体执行什么任务由几个参数来控制。通
                过使用特定于任务的线程池，可以分配固定数量的工作者线程，并根据需要为他们提供参数。工作者线
                程会接收这些参数，执行耗时的计算，并把结果返回给线程池。然后线程池可以再将其他工作分派给工
                作者线程去执行。接下来的例子将构建一个相对简单的线程池，但可以涵盖上述思路的所有基本要求。

            </li>
            <li>
                首先是定义一个 TaskWorker 类，它可以扩展 Worker 类。TaskWorker 类负责两件事：跟踪线程
                是否正忙于工作，并管理进出线程的信息与事件。另外，传入给这个工作者线程的任务会封装到一个期
                约中，然后正确地解决和拒绝。这个类的定义如下
            </li>
        </ul>
    </div>
    <script src="./main.js"></script>
</body>

</html>